package com.dhsc.service.impl.ywhc.zdsmzhc;

import com.dhsc.domain.jkzx.ywhc.zdsmzhc.ZdsmzdrVo;
import com.dhsc.domain.jkzx.ywhc.zdsmzhc.ZdsmzhcVo;
import com.dhsc.domain.yypt.LayuiTableVo;
import com.dhsc.domain.yypt.ResponseObject;
import com.dhsc.exception.MyException;
import com.dhsc.local.dao.ywhz.zdsmzhc.IZdsmzhcDao;
import com.dhsc.service.ywhc.zdsmzhc.IZdsmzhcService;
import com.dhsc.util.CommonUtil;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @Description:中登实名制核查
 * @Author: CDW
 * @Date: 2024/3/29 9:52
 */
@Service
@Slf4j
public class ZdsmzhcServiceImpl implements IZdsmzhcService {

    @Autowired
    private IZdsmzhcDao zdsmzhcDao;

    @Override
    public LayuiTableVo queryZdsmzhcInfo(ZdsmzhcVo zdsmzhcVo) {
        LayuiTableVo obj = new LayuiTableVo();
        try{
            List<ZdsmzhcVo> listrq  = zdsmzhcDao.queryCjrq(zdsmzhcVo);
            zdsmzhcVo.setRq(listrq.get(0).getRq());
            List<ZdsmzhcVo> list = zdsmzhcDao.queryZdsmzhcInfo(zdsmzhcVo);
            ArrayList<ZdsmzhcVo> arrayList = new ArrayList<>();
            for (int a = 0; a < list.size(); a++) {
                zdsmzhcVo.setKhh(list.get(a).getKhh());
                //查询ip数据
                List<ZdsmzhcVo> listIp = zdsmzhcDao.queryCzzdIp(zdsmzhcVo);
                //查询IP归属地数据
                List<ZdsmzhcVo> listIpgsd = zdsmzhcDao.queryCzzdIpgsd(zdsmzhcVo);
                //查询委托电话数据
                List<ZdsmzhcVo> listDh = zdsmzhcDao.queryCzzdDh(zdsmzhcVo);
                //查询mac数据
                List<ZdsmzhcVo> listMac = zdsmzhcDao.queryCzzdMac(zdsmzhcVo);
                //查询硬盘序列号
                List<ZdsmzhcVo> listHdd = zdsmzhcDao.queryCzzdHdd(zdsmzhcVo);
                //查询交易标的数据
                List<ZdsmzhcVo> listJybd = zdsmzhcDao.queryCzzdJybd(zdsmzhcVo);
                //查询同时段不同ip归属地数据
                List<ZdsmzhcVo> listTsd = zdsmzhcDao.queryCzzdTsdIp(zdsmzhcVo);
                //查询关联数据信息
                /*List<ZdsmzhcVo> listglsj = zdsmzhcDao.queryGlsjxx(zdsmzhcVo);*/

                for (int i = 0; i < listIp.size(); i++) {
                    for (int j = 0; j < listIpgsd.size(); j++) {
                        if(listIp.get(i).getIp().equals(listIpgsd.get(j).getIp())){
                            listIp.get(i).setIpgsd(listIpgsd.get(j).getIpgsd());
                        }
                    }
                }
                // 定义变量来存储最长的集合以及它的大小
                int maxLength = 0;
                List<ZdsmzhcVo> listjh = new ArrayList<>();
                // 比较集合的大小
                if (listHdd.size() > maxLength) {
                    maxLength = listHdd.size();
                    listjh = listHdd;
                }
               /* if (listglsj.size() > maxLength) {
                    maxLength = listglsj.size();
                    listjh = listglsj;
                }*/
                if (listIp.size() > maxLength) {
                    maxLength = listIp.size();
                    listjh = listIp;
                }
                if (listDh.size() > maxLength) {
                    maxLength = listDh.size();
                    listjh = listDh;
                }
                if (listMac.size() > maxLength) {
                    maxLength = listMac.size();
                    listjh = listMac;
                }
                if (listJybd.size() > maxLength) {
                    maxLength = listJybd.size();
                    listjh = listJybd;
                }
                if (listTsd.size() > maxLength) {
                    listjh = listTsd;
                }
                if (CommonUtil.isNotEmptyList(listjh)) {
                    for (int i = 0; i < listjh.size(); i++) {
                        if(listjh.get(i).getKhh().equals(list.get(a).getKhh())){
                            listjh.get(i).setKhh(list.get(a).getKhh());
                            listjh.get(i).setRq(list.get(a).getRq());
                            listjh.get(i).setYybmc(list.get(a).getYybmc());
                            listjh.get(i).setGdh(list.get(a).getGdh());
                            listjh.get(i).setKhmc(list.get(a).getKhmc());
                            listjh.get(i).setYmth(list.get(a).getYmth());
                            listjh.get(i).setNl(list.get(a).getNl());
                            listjh.get(i).setDz(list.get(a).getDz());
                            listjh.get(i).setZymc(list.get(a).getZymc());
                            listjh.get(i).setSj(list.get(a).getSj());
                            listjh.get(i).setLxr(list.get(a).getLxr());
                            listjh.get(i).setLxrlx(list.get(a).getLxrlx());
                            listjh.get(i).setLxrsj(list.get(a).getLxrsj());
                            listjh.get(i).setZgzc(list.get(a).getZgzc());
                            listjh.get(i).setQmzc(list.get(a).getQmzc());
                            listjh.get(i).setZjzr(list.get(a).getZjzr());
                            listjh.get(i).setZjzc(list.get(a).getZjzc());
                            listjh.get(i).setMm_xgcs(list.get(a).getMm_xgcs());
                            listjh.get(i).setJgcs(list.get(a).getJgcs());
                        }
                    }
                }

                if (CommonUtil.isNotEmptyList(listIp)) {
                    for (int j = 0; j < listIp.size(); j++) {
                        if (CommonUtil.isNotEmptyObj(listIp.get(j).getIp())) {
                            listjh.get(j).setIp(listIp.get(j).getIp());
                            listjh.get(j).setIpgsd(listIp.get(j).getIpgsd());
                        }
                    }
                }
                if (CommonUtil.isNotEmptyList(listTsd)) {
                    for (int j = 0; j < listTsd.size(); j++) {
                        if (CommonUtil.isNotEmptyObj(listTsd.get(j).getDip_ip())) {
                            listjh.get(j).setDip_ip(listTsd.get(j).getDip_ip());
                        }
                        if (CommonUtil.isNotEmptyObj(listTsd.get(j).getDip_ipgsd())) {
                            listjh.get(j).setDip_ipgsd(listTsd.get(j).getDip_ipgsd());
                        }
                        if (CommonUtil.isNotEmptyObj(listTsd.get(j).getDip_rq())) {
                            listjh.get(j).setDip_rq(listTsd.get(j).getDip_rq());
                        }
                    }
                }

                if (CommonUtil.isNotEmptyList(listMac)) {
                    for (int j = 0; j < listMac.size(); j++) {
                        if (CommonUtil.isNotEmptyObj(listMac.get(j).getMac())) {
                            listjh.get(j).setMac(listMac.get(j).getMac());
                        }
                    }
                }

                if (CommonUtil.isNotEmptyList(listHdd)) {
                    for (int j = 0; j < listHdd.size(); j++) {
                        if (CommonUtil.isNotEmptyObj(listHdd.get(j).getHdd())) {
                            listjh.get(j).setHdd(listHdd.get(j).getHdd());
                        }
                    }
                }

                if (CommonUtil.isNotEmptyList(listDh)) {
                    for (int j = 0; j < listDh.size(); j++) {
                        if (CommonUtil.isNotEmptyObj(listDh.get(j).getDh())) {
                            listjh.get(j).setDh(listDh.get(j).getDh());
                        }
                    }
                }
                /*if (CommonUtil.isNotEmptyList(listglsj)) {
                    for (int j = 0; j < listglsj.size(); j++) {
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlr_bc())) {
                            listjh.get(j).setGlr_bc(listglsj.get(j).getGlr_bc());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlmac_glr())) {
                            listjh.get(j).setGlmac_glr(listglsj.get(j).getGlmac_glr());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlmac_gdh())) {
                            listjh.get(j).setGlmac_gdh(listglsj.get(j).getGlmac_gdh());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlmac())) {
                            listjh.get(j).setGlmac(listglsj.get(j).getGlmac());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlip())) {
                            listjh.get(j).setGlip(listglsj.get(j).getGlip());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlip_glr())) {
                            listjh.get(j).setGlip_glr(listglsj.get(j).getGlip_glr());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlip_gdh())) {
                            listjh.get(j).setGlip_gdh(listglsj.get(j).getGlip_gdh());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGldh())) {
                            listjh.get(j).setGldh(listglsj.get(j).getGldh());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGldh_glr())) {
                            listjh.get(j).setGldh_glr(listglsj.get(j).getGldh_glr());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGldh_gdh())) {
                            listjh.get(j).setGldh_gdh(listglsj.get(j).getGldh_gdh());
                        }

                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGljy_glr())) {
                            listjh.get(j).setGljy_glr(listglsj.get(j).getGljy_glr());
                        }

                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGljy())) {
                            listjh.get(j).setGljy(listglsj.get(j).getGljy());
                        }

                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGljy_gdh())) {
                            listjh.get(j).setGljy_gdh(listglsj.get(j).getGljy_gdh());
                        }

                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGldh_gdh())) {
                            listjh.get(j).setGldh_gdh(listglsj.get(j).getGldh_gdh());
                        }

                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlzj())) {
                            listjh.get(j).setGlzj(listglsj.get(j).getGlzj());
                        }
                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlzj_glr())) {
                            listjh.get(j).setGlzj_glr(listglsj.get(j).getGlzj_glr());
                        }

                        if (CommonUtil.isNotEmptyObj(listglsj.get(j).getGlzj_gdh())) {
                            listjh.get(j).setGlzj_gdh(listglsj.get(j).getGlzj_gdh());
                        }
                    }
                }*/

                if (CommonUtil.isNotEmptyList(listJybd)) {
                    for (int j = 0; j < listJybd.size(); j++) {
                        if (CommonUtil.isNotEmptyObj(listJybd.get(j).getZqdm())) {
                            listjh.get(j).setZqdm(listJybd.get(j).getZqdm());
                        }
                    }
                }
                arrayList.addAll(listjh);
            }
            obj.setData(arrayList);
            obj.setMsg("");
            obj.setCount(arrayList.size());
            obj.setCode(0);
        }catch(Exception e){
            log.error("查询中登实名制核查出错", e);
            throw new MyException("查询中登实名制核查出错",e);
        }
        return obj;
    }

    @Override
    @Transactional("localTransactionManager")
    public ResponseObject saveDrZdsmzxx(ZdsmzdrVo zdsmzdrVo) {
        ResponseObject obj = new ResponseObject();
        try{
            List<ZdsmzdrVo> list = CommonUtil.readValueAsListIgnoreUnknown(zdsmzdrVo.getJson(), ZdsmzdrVo.class);
            //删除当天导入的其他信息
            zdsmzhcDao.deleteDrZdsmzxx(list.get(0).getRq());
            zdsmzhcDao.saveDrZdsmzxx(list);
            //记录当前操作
            ZdsmzhcVo z = new ZdsmzhcVo();
            String s = CommonUtil.getDateTime();
            zdsmzdrVo.setCzrq(s);
            z.setCzrq(s);
            z.setMs("JKZX.PRO_ZDSMZ_DR");
            zdsmzhcDao.saveDqcz(z);
            obj.setStatus(200);
        }catch(Exception e){
            log.error("保存导入的中登实名制信息出错", e);
            throw new MyException("保存导入的中登实名制信息出错",e);
        }
        return obj;
    }

    @Override
    public ResponseObject queryZdsmzGlxx(ZdsmzhcVo z) {
        ResponseObject obj = new ResponseObject();
        try{
            List<ZdsmzhcVo> listrq  = zdsmzhcDao.queryCjrq(z);
            z.setRq(listrq.get(0).getRq());
            List<ZdsmzhcVo> listglsj = zdsmzhcDao.queryGlsjxx(z);
            obj.setData(listglsj);
            obj.setStatus(200);
        }catch(Exception e){
            log.error("查询中登实名制关联信息出错", e);
            throw new MyException("查询中登实名制关联信息出错",e);
        }
        return obj;
    }

    @Override
    public LayuiTableVo queryZdsmzhcXx(ZdsmzhcVo z) {
        LayuiTableVo obj = new LayuiTableVo();
        try{
            List<ZdsmzhcVo> listrq  = zdsmzhcDao.queryCjrq(z);
            z.setRq(listrq.get(0).getRq());
            PageMethod.startPage(z.getPage(),z.getLimit());
            List<ZdsmzhcVo> list = zdsmzhcDao.queryZdsmzhcXx(z);
            PageInfo<ZdsmzhcVo> pageInfo = new PageInfo<>(list);
            obj.setData(list);
            obj.setMsg("");
            obj.setCount(pageInfo.getTotal());
            obj.setCode(0);
        }catch(Exception e){
            log.error("查询中登实名制导入信息出错", e);
            throw new MyException("查询中登实名制导入信息出错",e);
        }
        return obj;
    }

    @Override
    public ResponseObject scdcsj(ZdsmzhcVo z) {
        ResponseObject obj = new ResponseObject();
        try{
            //查询当前表中有没有生成本地数据
            String s = CommonUtil.getDateTime();
            z.setCzrq(s);
            z.setMs("JKZX.PRO_ZDSMZ_SC");
            zdsmzhcDao.saveDqcz(z);
            //导入成功后执行存储过程
            Map<String,Object> map = new HashMap<>();
            map.put("i_date", 0);
            zdsmzhcDao.callzdsmzhc(map);
            obj.setStatus(200);
        }catch(Exception e){
            log.error("调用存储过程生成导出数据出错", e);
            throw new MyException("调用存储过程生成导出数据出错",e);
        }
        return obj;
    }

    @Override
    public ResponseObject queryZdsmzSjscQk(ZdsmzhcVo z) {
        ResponseObject obj = new ResponseObject();
        try{
            //查询当前表中有没有生成本地数据
            ZdsmzhcVo zd = zdsmzhcDao.queryCcgcZxqk(z);
            if(CommonUtil.isNotEmptyObj(zd)){
                List<ZdsmzhcVo> listrq  = zdsmzhcDao.queryCjrq(z);
                SimpleDateFormat originalFormat = new SimpleDateFormat("yyyyMMdd");
                SimpleDateFormat targetFormat = new SimpleDateFormat("yyyy-MM-dd");
                Date date = originalFormat.parse(listrq.get(0).getRq().toString());
                String formattedDateString = targetFormat.format(date);
                if(zd.getZxrq().contains(formattedDateString)){
                    if(zd.getCode() == -1){
                        obj.setMessage("存储过程执行失败，请重新生成数据");
                        obj.setStatus(201);
                        return obj;
                    }
                }else{
                    obj.setMessage("本地数据未生成完成，请稍后！");
                    obj.setStatus(201);
                    return obj;
                }
            }else{
                obj.setMessage("本地数据未生成完成，请稍后！");
                obj.setStatus(201);
                return obj;
            }
            //查询ip归属地有没有翻译完成
            int c = zdsmzhcDao.queryIpgsdFyQk(z);
            if(c > 0){
                obj.setMessage("IP归属地查询未完成，请稍后再导出");
                obj.setStatus(201);
                return obj;
            }
            obj.setStatus(200);
        }catch(Exception e){
            log.error("调用存储过程生成导出数据出错", e);
            throw new MyException("调用存储过程生成导出数据出错",e);
        }
        return obj;
    }

    @Override
    public ResponseObject saveDqcz(ZdsmzhcVo z) {
        ResponseObject obj = new ResponseObject();
        try{
            //查询当前表中有没有生成本地数据
            String s = CommonUtil.getDateTime();
            z.setCzrq(s);
            z.setMs("JKZX.PRO_ZDSMZ_DC");
            zdsmzhcDao.saveDqcz(z);
            obj.setStatus(200);
        }catch(Exception e){
            log.error("调用存储过程生成导出数据出错", e);
            throw new MyException("调用存储过程生成导出数据出错",e);
        }
        return obj;
    }

    @Override
    public ResponseObject queryCcgcZxqks(ZdsmzhcVo z) {
        ResponseObject obj = new ResponseObject();
        try{
            ZdsmzhcVo zd =  zdsmzhcDao.queryCcgcZxqks(z);
            obj.setData(zd);
            obj.setStatus(200);
        }catch(Exception e){
            log.error("查询当前执行步骤出错", e);
            throw new MyException("查询当前执行步骤出错",e);
        }
        return obj;
    }
}
